perm filename DIGTIZ.SAI[PIX,HPM] blob sn#472714 filedate 1979-09-06 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	BEGIN "DIGTIZ"
C00009 ENDMK
C⊗;
BEGIN "DIGTIZ"
INTEGER NRT,P2,JOBNO;  INTEGER I,J,N,NPX,NSU;  REAL REDUN; STRING S;
INTEGER BCL,TCL,SUMS,XEE,YEE,NRTRY,PAUSES;  INTEGER CAMRA,CAM,HIG,WID,BIT;
STRING FND,FN1,FN2,FNP,FNR;
REQUIRE "PIXHDR.SAI[VIS,HPM]" SOURCE_FILE;
INTEGER ARRAY MESSAGE[1:32], HD[1:2];

IF FALSE THEN BEGIN
S←S[1 TO 1]; comment forces SUBST to be loaded;
CALL(0,"SLEEP"); comment forces CALL to be loaded;
END;

PRINT("READY");
START_CODE MAIL 1,ACCESS(MESSAGE[1]); comment WRCV; END;
WHILE TRUE DO
   BEGIN "WAIT"
   JOBNO←MESSAGE[1];
   HIG←MESSAGE[2]; WID←MESSAGE[3]; BIT←MESSAGE[4];   CAMRA←MESSAGE[5];
   YEE←MESSAGE[6]; XEE←MESSAGE[7];   BCL←MESSAGE[8]; TCL←MESSAGE[9];
   SUMS←MESSAGE[10];   REDUN←MEMORY[LOCATION(MESSAGE[11]),REAL];
   FND←CV6STR(MESSAGE[12]);   FN1←CV6STR(MESSAGE[13]);   FN2←CV6STR(MESSAGE[14]);
   FNP←CV6STR(MESSAGE[15]);   FNR←CV6STR(MESSAGE[16]);
   PAUSES←MESSAGE[17];

   HD[1]←JOBNO;  HD[2]←LOCATION(MESSAGE[1]);  P2←0; WHILE 2↑P2<SUMS DO P2←P2+1;

   IF CAMRA>'40 THEN CAMRA←CAMRA LAND '67;
   IF CAMRA='42∨CAMRA='41 THEN CAM←CAMRA LAND 3 ELSE
      BEGIN INTEGER I,J;
      I←'401400000000 LOR LOCATION(J);
      J←IF CAMRA≥'40 THEN CAMRA LAND 7 ELSE 1 LSH (35-CAMRA);
         START_CODE
            MOVE    1,I;
            CALLI   1,'400070;       COMMENT VDSMAP;
            JUMP    0,0;
         END;
      CAM←3;
      END;

      BEGIN "ARRAYS"
      INTEGER ARRAY T[1:NPX←REDUN*SUMS*2↑(BIT-4),0:PIXDIM(HIG,WID,4)];
      INTEGER ARRAY U[0:PIXDIM(HIG,WID,P2+BIT)], PIC[0:PIXDIM(HIG,WID,BIT)];
      INTEGER ARRAY MTCH,RN[1:NPX,1:NPX];INTEGER ARRAY DIA[1:NPX];

      MAKPIX(HIG,WID,BIT,PIC[0]);  MAKPIX(HIG,WID,BIT+P2,U[0]);

      NSU←SUMS*2↑(BIT-4);
      FOR I←1 STEP 1 UNTIL NPX DO MAKPIX(HIG,WID,4,T[I,0]);

      PRINT("!");
      WHILE TRUE DO
	 BEGIN "TAKE"
	 START_CODE MAIL 1,ACCESS(MESSAGE[1]); comment WRCV; END;
	 IF MESSAGE[1]>0 THEN DONE "TAKE";

	 NRT←0;  FOR I←1 STEP 1 UNTIL NPX DO
	 NRT←NRT LOR TVRAW(CAM,YEE,XEE,T[I,0],BCL,TCL,NRTRY);

	 HD[1]←JOBNO;  HD[2]←LOCATION(MESSAGE[1]);

	 START_CODE MAIL 0,ACCESS(HD[1]); comment SEND; JRST .+1; END;

	 FOR I←1 STEP 1 UNTIL NPX DO
            BEGIN INTEGER J; TVGRY(T[I,0]);
            IF PAUSES>0 THEN CALL(PAUSES,"SLEEP") ELSE
            IF PAUSES<0 THEN FOR J←1 STEP 1 UNTIL -PAUSES DO CALL(0,"SLEEP");
            END; 

	 IF NRT≥0 THEN
	    BEGIN "COMPARE"
	    INTEGER BST;
	    FOR I←1 STEP 1 UNTIL NPX-1 DO FOR J←I+1 STEP 1 UNTIL NPX DO
	       MTCH[I,J]←MTCH[J,I]←CMPPAD(T[I,0],T[J,0]);
	    BST←1;
	    FOR I←1 STEP 1 UNTIL NPX DO
	       BEGIN INTEGER II,JJ;
	       FOR II←1 STEP 1 UNTIL NPX DO
		  BEGIN
		  RN[I,II]←1;
		  FOR JJ←1 STEP 1 UNTIL II-1 DO IF MTCH[I,JJ]<MTCH[I,II]
		     THEN RN[I,II]←RN[I,II]+1 ELSE RN[I,JJ]←RN[I,JJ]+1;
		  END;
	       FOR II←1 STEP 1 UNTIL NPX DO IF RN[I,II]=NSU THEN DIA[I]←MTCH[I,II];
	       IF DIA[I]<DIA[BST] THEN BST←I;
	       END;
            WIPE(U[0]);
	    FOR I←1 STEP 1 UNTIL NPX DO IF RN[BST,I]≤NSU THEN PICADD(T[I,0],U[0]);
	    END "COMPARE";

	 PICSH(U[0],PIC[0],SUMS);
	 PUTPFL(PIC[0],FND&":"&FN1&"."&FN2&"["&FNP&","&FNR&"]");

	 HD[1]←JOBNO;	 HD[2]←LOCATION(MESSAGE[1]);
	 START_CODE MAIL 0,ACCESS(HD[1]); comment SEND; JRST .+1; END;
	 END "TAKE";
      END "ARRAYS";
   END "WAIT";
END;